/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.Ufes.exeSwing.Presenter;

import edu.Ufes.exeSwing.Collection.PessoaFisicaCollection;
import edu.Ufes.exeSwing.Model.PessoaFisica;
import edu.Ufes.exeSwing.Persistence.PessoaFisicaPersistence;
import edu.Ufes.exeSwing.View.InclusaoPessoaFisicaView;
import edu.Ufes.exeSwing.View.ListaPessoasFisicasView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.TreeSet;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author bhetynnacatalunha
 */
public class PessoaFisicaPresenter {

    InclusaoPessoaFisicaView inclusaoPessoaFisicaView;
    PessoaFisicaCollection pessoasFisicas;
    ListaPessoasFisicasView listaPessoasFisicasView;
    DefaultTableModel tm;

    public PessoaFisicaPresenter() {
        inclusaoPessoaFisicaView = new InclusaoPessoaFisicaView();
        pessoasFisicas = new PessoaFisicaCollection(new PessoaFisicaPersistence());
        listaPessoasFisicasView = new ListaPessoasFisicasView();

        inclusaoPessoaFisicaView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoPessoaFisicaView.dispose();
            }
        });

        inclusaoPessoaFisicaView.getBtnSalvar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                salvar();
            }
        });

        listaPessoasFisicasView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                listaPessoasFisicasView.dispose();
            }
        });

        listaPessoasFisicasView.getBtnNova().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoPessoaFisicaView.getTxtCPF().setText("");
                inclusaoPessoaFisicaView.getTxtNome().setText("");
                inclusaoPessoaFisicaView.getTxtDataNascimento().setText("");
                inclusaoPessoaFisicaView.getTxtEndereco().setText("");
                inclusaoPessoaFisicaView.getTxtNomeUsuario().setText("");
                inclusaoPessoaFisicaView.setVisible(true);
            }
        });

        listaPessoasFisicasView.getBtnEditar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                editar();
            }
        });

        listaPessoasFisicasView.getBtnExcluir().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                excluir();
            }
        });
        
        listaPessoasFisicasView.getBtnPesquisar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                pesquisar();
            }
        });
        
        carregaPessoasFisicas(pessoasFisicas.getTodasPessoasFisicas());
        
        listaPessoasFisicasView.setVisible(true);

    }
    
    private void pesquisar() {
        tm.setNumRows(0);
        TreeSet<PessoaFisica> pessoasfisicas = this.pessoasFisicas.getTodasPessoasFisicas();
        Iterator<PessoaFisica> it = pessoasfisicas.iterator();
        while (it.hasNext()) {
            PessoaFisica a = it.next();
            int fim = listaPessoasFisicasView.getTxtFiltro().getText().length();

            String nome = a.getNome();
            String filtro = listaPessoasFisicasView.getTxtFiltro().getText();

            if (nome.length() < fim) {
                fim = nome.length();
            }

            if (nome.substring(0, fim).toUpperCase().equals(filtro.toUpperCase())) {
                String linha = a.toString();
                String valores[] = linha.split("#");
                tm.addRow(valores);
            }


        }
    }

    private void carregaPessoasFisicas(TreeSet pessoasFisicas) {
        tm = new DefaultTableModel(new Object[][]{}, new String[]{"Nome", "Nome do Usuario", "CPF", "Endereco", "Data de Nascimento"}) {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
        tm.setNumRows(0);
        Iterator<PessoaFisica> it = pessoasFisicas.iterator();
        while (it.hasNext()) {
            PessoaFisica d = it.next();
            String linha = d.toString();
            String valores[] = linha.split("#");
            tm.addRow(valores);
        }
        this.listaPessoasFisicasView.getTblPessoasFisicas().setModel(tm);
    }

    private void salvar() {
        PessoaFisica pessoaFisica = new PessoaFisica(null, null, null, null, null);
        pessoaFisica.setCPF(inclusaoPessoaFisicaView.getTxtCPF().getText().toString());
        pessoaFisica.setEndereco(inclusaoPessoaFisicaView.getTxtEndereco().getText().toString());
        pessoaFisica.setNome(inclusaoPessoaFisicaView.getTxtNome().getText().toString());
        pessoaFisica.setDataNascimento(inclusaoPessoaFisicaView.getTxtDataNascimento().getText().toString());
        pessoaFisica.setNomeUsuario(inclusaoPessoaFisicaView.getTxtNomeUsuario().getText().toString());
      
        
        if (pessoaFisica.getCPF().isEmpty() || pessoaFisica.getNomeUsuario().isEmpty() || pessoaFisica.getDataNascimento().isEmpty() || pessoaFisica.getNome().isEmpty() || pessoaFisica.getEndereco().isEmpty()) {
            JOptionPane.showMessageDialog(inclusaoPessoaFisicaView, "Preencha os campos em Branco");
        } else {
            pessoasFisicas.excluirPessoaFisica(pessoaFisica);
            pessoasFisicas.incluirPessoaFisica(pessoaFisica);
            this.carregaPessoasFisicas(pessoasFisicas.getTodasPessoasFisicas());
            inclusaoPessoaFisicaView.dispose();
            JOptionPane.showMessageDialog(listaPessoasFisicasView, "Cliente Salvo com Sucesso");
        }
    }

    private void editar() {
        if (listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow() != -1) {
            String nome = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 0);
            String nomeUsuario = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 1);
            String cpf = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 2);
            String endereco = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 3);
            String dataAniversario = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 4);
            PessoaFisica pessoaFisica = new PessoaFisica(nomeUsuario, endereco, cpf, dataAniversario, nome);   
            inclusaoPessoaFisicaView.getTxtCPF().setText(cpf);
            inclusaoPessoaFisicaView.getTxtCPF().setEnabled(false);
            inclusaoPessoaFisicaView.getTxtDataNascimento().setText(dataAniversario);
            inclusaoPessoaFisicaView.getTxtEndereco().setText(endereco);
            inclusaoPessoaFisicaView.getTxtNome().setText(nome);
            inclusaoPessoaFisicaView.getTxtNomeUsuario().setText(nomeUsuario);
            inclusaoPessoaFisicaView.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(inclusaoPessoaFisicaView, "Selecione uma linha");
        }


    }

    private void excluir() {
        if (listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow() != -1) {
            if (JOptionPane.showConfirmDialog(listaPessoasFisicasView, "Deseja mesmo excluir este Cliente?") == 0) {
                String nome = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 0);
                String nomeUsuario = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 1);
                String cpf = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 2);
                String endereco = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 3);
                String dataAniversario = (String) listaPessoasFisicasView.getTblPessoasFisicas().getValueAt(listaPessoasFisicasView.getTblPessoasFisicas().getSelectedRow(), 4);
                PessoaFisica pessoaFisica = new PessoaFisica(nomeUsuario, endereco, cpf, dataAniversario, nome);
                pessoasFisicas.excluirPessoaFisica(pessoaFisica);
                this.carregaPessoasFisicas(pessoasFisicas.getTodasPessoasFisicas());
                JOptionPane.showMessageDialog(listaPessoasFisicasView, "Cliente excluido com Sucesso!");
            }
        } else {
            JOptionPane.showMessageDialog(listaPessoasFisicasView, "Selecione uma linha");
        }
    }
}
